S3のバケットポリシー書き方まとめ

您所在的位置:网站首页 aws s3 policy S3のバケットポリシー書き方まとめ

S3のバケットポリシー書き方まとめ

2023-07-27 00:32| 来源: 网络整理| 查看: 265

最近AWSを勉強し始めたのですが、ポリシーを書くときに毎度迷子になるので バケットポリシーを中心としてリソースベースのポリシーの書き方をまとめておきます。

前提

例えばS3を静的ホスティング先として設定する場合、 ・ブロックパブリックアクセスのブロック無効化 ・静的ウェブサイトホスティングの有効化 これらを行いますが、それだけだとエンドポイントにアクセスすることはできません。

スクリーンショット 2021-05-15 17.50.20.png ↑アクセスするとこうなる

何が足りないかというと、バケットポリシー の設定です。 S3のバケットポリシーはデフォルトでは全拒否となっています。

バケットポリシー全貌 { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1621068192000", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "s3:*", "Resource": "arn:aws:s3:::${ここにバケットの名前を入れる}" } ] }

上記のように記述します。

各項目については、 こちらの公式リファレンスで確認ができます。

Version

これはIAMポリシーの文法のバージョンです。 現在(2021/5/15)は 2012-10-17 です。 もう随分長いこと変わっていませんね。

Statement.Sid

これはポリシードキュメントに対して任意で与える識別子です。ステートメント毎に割り当てることができ、ポリシー内で重複してはいけません。

Statement.Effect

許可の一覧であるAllow(ホワイトリスト)にするのか、禁止一覧であるDeny(ブラックリスト)にするのかを選べます。

Statement.Principal

どの相手(Principal)に対して許可ないし拒否するかを指定します。 指定できる代表的なプリンシパルは下記にのようなものがあります。

AWSアカウント/ルートユーザー IAMユーザー IAMロール AWSサービス "Principal": { "AWS": "arn:aws:iam::AWSアカウントID:user/userネーム" } // 下記だと全てのユーザーに対して許可となる "Principal": { "AWS": "*" } Statement.Action

許可ないし拒否するアクションを指定します。

// s3全てのアクション "Action": "s3:*" // sqsのsedMessageアクション "Action": "sqs:SendMessage" Statement. Resource

一連のステートメントをどのリソースに反映するかを記述します。

// examplebucketという名前のs3に対してポリシーのステートメントが反映される。 "Resource": "arn:aws:s3:::examplebucket" // ワイルドカードも一部使用可能。下記はexamplebucketという名前のS3バケット内の全ての項目に対して反映される。 "Resource": "arn:aws:s3:::examplebucket/*" 応用的な記述

Condition を使用して、ポリシーの実行するタイミングの条件を指定することができます。 これによって、 - IP制限 - ユーザー名による制限 - HTTP Refererの制限 - MFAの要求 など細かいコントロールをすることができます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"} } } ] }

上記は EffectがDeny(拒否)で NotIpAddressとしてIPアドレスが指定されているので、 54.240.143.0/24のIPアドレス以外は拒否する、という設定になります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "Condition": { "StringEquals": { "aws:username": "myname" } } } ] }

上記はAWSユーザー名が mynameの時のみ許可されます。 aws:usernameなどのポリシードキュメントで取得できるキーは、下記の公式ドキュメントに一覧があります。 タグやリージョン、日付など、色々なキーが取得できるようです。 AWS グローバル条件コンテキストキー

ポリシージェネレーター

公式側でポリシーのジェネレーターなるものも用意されており非常に便利です。 スクリーンショット 2021-05-16 13.08.56.png

土台をジェネレーターでサクッと作成し、細かい部分は修正していくといった利用をしていこうと思います。

参考資料 AWS公式リファレンス S3バケットポリシーの具体例で学ぶAWSのPolicyドキュメント IAMについて今更学ぶ


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3